package com.wxy.ej.flow.modules.taskflow.service.nodeExecuteStrategy.strategy.code;

import com.alibaba.fastjson.JSONObject;
import com.rt.easyjava.common.base.Result;
import com.rt.easyjava.common.utils.others.StringUtils;
import com.wxy.ej.flow.modules.taskflow.dto.DataDto;
import com.wxy.ej.flow.modules.taskflow.dto.NodeDto;
import com.wxy.ej.flow.modules.taskflow.service.nodeExecuteStrategy.NodeStrategy;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

@Slf4j
public class CodeDefineVarNodeStrategy extends NodeStrategy {

    @Override
    public Result action(NodeDto node, JSONObject flowDataJson, DataDto dataDto) throws Exception{
        String defineVarName = node.getDefineVarName();
        String defineVarType = node.getDefineVarType();
        String defineVarInitData = node.getDefineVarInitData();
        log.info("Code-DefineVar-NodeStrategy: defineVarName: {}", defineVarName);

        // 没有设置变量名称
        if (StringUtils.isNull(defineVarName)) {
            return Result.builder();
        }

        Object initData = null;
        //
        switch (defineVarType) {
            case "list":{
                if (StringUtils.isNull(defineVarInitData)) {
                    initData = new ArrayList<>();
                } else {
                    initData = JSONObject.parseArray(defineVarInitData, Map.class);
                }
                break;
            }
            case "map":{
                if (StringUtils.isNull(defineVarInitData)) {
                    initData = new HashMap<>();
                } else {
                    initData = JSONObject.parseObject(defineVarInitData,Map.class);
                }
                break;
            }
        }

        //
        dataDto.getStorageDataVarMap().put(defineVarName, initData);

        // 执行js
        String jsScript = node.getScript();
        if (!StringUtils.isNull(jsScript)) {
            executeScripts(dataDto, jsScript);
        }

        return Result.builder();
    }

}
